home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / gfx / opal / devdocs.lha / Examples / BackDrop24.c < prev    next >
C/C++ Source or Header  |  1993-05-04  |  4KB  |  186 lines

  1. #include <exec/types.h>
  2. #include <opal/opallib.h>
  3. #include <intuition/intuitionbase.h>
  4. #include <workbench/icon.h>
  5. #include <workbench/workbench.h>
  6. #include <workbench/startup.h>
  7. #include <proto/all.h>
  8. #include <string.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12.  
  13. #define VERSION "1.2"
  14.  
  15.     /* 2.0 style version string for the VERSION command */
  16. char Version[] = "\0$VER: BackDrop24 " VERSION " (5.11.92)";
  17.  
  18. struct OpalBase *OpalBase;
  19. struct GfxBase *GfxBase;
  20. struct IntuitionBase *IntuitionBase;
  21. struct OpalScreen *OScrn;
  22. struct WBArg *WBArg;
  23. BOOL FromWB;
  24.  
  25. #define OR ||
  26. #define AND &&
  27.  
  28. char Banner[] = "BackDrop24 V"VERSION" by Martin Boyd, ©1992 Opal Technology Pty Ltd.\n";
  29. char Usage[] = "Usage: BackDrop24 File\n";
  30.  
  31. void Clean_Up (char *String,int RetCode);
  32. char *WB_Arg (void);
  33. int Num_WB_Args (struct WBStartup *ArgMsg);
  34. void Remove_Latch (void);
  35. BOOL Display_Mode_Check (void);
  36.  
  37.  
  38. void main (int argc,char *argv[])
  39. {
  40.    long Err;
  41.    int NumArgs;
  42.    char *Name;
  43.  
  44.     if (argc==0)
  45.         { NumArgs = Num_WB_Args ((struct WBStartup *)argv);
  46.           FromWB = TRUE;
  47.         }
  48.     else
  49.         NumArgs = argc-1;
  50.  
  51.     if (!FromWB)
  52.         puts (Banner);
  53.     if (!Display_Mode_Check())
  54.         Clean_Up ("You cannot run a backdrop with a high scan-rate Amiga display (>15Khz).\n",0);
  55.  
  56.  
  57.     OpalBase = (struct OpalBase *) OpenLibrary ("opal.library",0L);
  58.     if (OpalBase==0L)
  59.         Clean_Up ("Can't open opal.library\n",10);
  60.  
  61.     if (NumArgs==0)
  62.         { Remove_Latch();
  63.           if (!FromWB)
  64.             puts (Usage);
  65.           Clean_Up ("BackDrop Removed.",0);
  66.         }
  67.  
  68.     if (NumArgs!=1)
  69.         Clean_Up (Usage,0);
  70.  
  71.     OScrn = NULL;
  72.     if (FromWB)
  73.         Name = WB_Arg();
  74.     else
  75.         Name = argv[1];
  76.     Err = LoadImage24 (NULL,Name,VIRTUALSCREEN24);
  77.     if (Err < OL_ERR_MAXERR)
  78.         { if (Err==OL_ERR_OPENFILE)
  79.             Clean_Up ("Error opening file!!\n",10);
  80.           else if ((Err==OL_ERR_NOTILBM) OR (Err==OL_ERR_BADIFF)
  81.             OR (Err==OL_ERR_NOTIFF))
  82.             Clean_Up ("Not a recognised file format!!\n",10);
  83.           else if (Err==OL_ERR_OUTOFMEM)
  84.             Clean_Up ("Out of memory!!\n",10);
  85.           else if (Err==OL_ERR_CTRLC)
  86.             Clean_Up ("",0);
  87.           else
  88.             Clean_Up ("Error displaying file!!\n",10);
  89.         }
  90.     OScrn = (struct OpalScreen *) Err;
  91.     Err = (long)LowMemUpdate24 (OScrn,0);
  92.     if ((Err>OL_ERR_MAXERR) AND (!(OScrn->Flags&ILACE24)))
  93.         Err = (long)LowMemUpdate24 (OScrn,6);
  94.     FreeScreen24 (OScrn);
  95.     if (Err < OL_ERR_MAXERR)
  96.         { if (Err==OL_ERR_OUTOFMEM)
  97.             Clean_Up ("Out of memory!!\n",10);
  98.           if (Err==OL_ERR_CANTCLOSE)
  99.             Clean_Up ("OpalVision Display in Use.\n",10);
  100.           Clean_Up ("Error Displaying Backdrop\n",10);
  101.         }
  102.     AmigaPriority ();
  103.     DualDisplay24 ();
  104.     AutoSync24 (TRUE);
  105.     Delay (2L);
  106.     LatchDisplay24 (TRUE);
  107.     Delay (2L);
  108.     Clean_Up (NULL,0);
  109. }
  110.  
  111.  
  112. int Num_WB_Args (struct WBStartup *ArgMsg)
  113. {
  114.     WBArg = ArgMsg->sm_ArgList;
  115.     return (ArgMsg->sm_NumArgs-1);
  116. }
  117.  
  118.  
  119. char *WB_Arg (void)
  120. {
  121.     WBArg++;
  122.     CurrentDir (WBArg->wa_Lock);
  123.     return (WBArg->wa_Name);
  124. }
  125.  
  126. void _abort (void)
  127. {
  128.     Clean_Up ("Aborted\n",0);
  129. }
  130.  
  131. void Remove_Latch (void)
  132. {
  133.     if (OpenScreen24(CONTROLONLY24)!=NULL)
  134.         { Delay (2L);
  135.           CloseScreen24();
  136.         }
  137. }
  138.  
  139.  
  140. void Clean_Up (char *String,int RetCode)
  141. {
  142.  
  143.     if (OpalBase!=NULL)
  144.         { CloseScreen24 ();
  145.           CloseLibrary ((struct Library *)OpalBase);
  146.         }
  147.     if ((String!=NULL) AND (!FromWB))
  148.         puts (String);
  149.     exit (RetCode);
  150. }
  151.  
  152.  
  153. BOOL Display_Mode_Check (void)
  154. {
  155.    struct MonitorInfo MonitorInfo;
  156.    DisplayInfoHandle Handle;
  157.    ULONG ModeID;
  158.    LONG Result;
  159.  
  160.     GfxBase = (struct GfxBase *)OpenLibrary ("graphics.library",36L);
  161.     if (GfxBase==NULL) return (TRUE);
  162.     IntuitionBase = (struct IntuitionBase *)OpenLibrary ("intuition.library",0L);
  163.     if (IntuitionBase==NULL)
  164.         { CloseLibrary ((struct Library *)GfxBase);
  165.           return (TRUE);
  166.         }
  167.     ModeID = GetVPModeID (&IntuitionBase->FirstScreen->ViewPort);
  168.     Handle = FindDisplayInfo (ModeID);
  169.     Result = GetDisplayInfoData (Handle,(UBYTE *)&MonitorInfo,
  170.             sizeof (struct MonitorInfo),DTAG_MNTR,NULL);
  171.  
  172.     /*  If line frequency if >15Khz, a backdrop
  173.      * cannot be displayed.
  174.      */
  175.  
  176.     if (MonitorInfo.TotalColorClocks<220)
  177.         { CloseLibrary ((struct Library *)GfxBase);
  178.           CloseLibrary ((struct Library *)IntuitionBase);
  179.           return (FALSE);
  180.         }
  181.     CloseLibrary ((struct Library *)GfxBase);
  182.     CloseLibrary ((struct Library *)IntuitionBase);
  183.     return (TRUE);
  184. }
  185.  
  186.